package com.example.designpattern.responsibility_three;

import com.example.model.GoodsDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public abstract class AbstractValidator implements IValidator {

    protected final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Override
    public void validate(GoodsDTO dto, IValidatorChain chain){
        // 前置处理
        preValidate(dto);

        // 真正校验逻辑
        doValidate(dto);

        // 后置处理
        postValidate(dto);

        // 交给责任链转发下一个节点
        chain.validate(dto);
    }

    /**
     * 真正的校验实现交给子类
     * for subClass
     * @param dto
     */
    protected abstract void doValidate(GoodsDTO dto);

    /**
     * 校验前置处理
     */
    protected abstract void preValidate(GoodsDTO dto);

    /**
     * 校验后置处理
     */
    protected abstract void postValidate(GoodsDTO dto);

}
